home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / BASIC / 2823.ZIP / S&B4EGA.BAS < prev    next >
BASIC Source File  |  1990-11-22  |  8KB  |  181 lines

  1. ' =======================================================
  2. '  S&B4EGA.BAS  Copyright (c) 1990  Michael Welch
  3. '  included with GrafWiz by permission
  4. ' =======================================================
  5. '  Name:  S&B4EGA.BAS - Sticks and Boxes for EGA
  6. '  Type:  Main Module
  7. '  Lang:  Microsoft QuickBASIC v4.5
  8. '  Ver:   1.10
  9. '  Date:  10/15/1990
  10. '  By:    Michael Welch of Dallas, Texas
  11. '  Reqs:  Crescent Software's PDQ.LIB
  12. '         Tom Hanlin's Graphics Wizard library
  13. '  Purp:  (multifaceted):
  14. '         1.  To demonstrate the efficiency of Crescent's
  15. '             BCOMxx replacement library for QuickBASIC.
  16. '         2.  To demonstrate the capabilities and the
  17. '             extensions of Tom Hanlin's Graphics Wizard
  18. '             replacement graphics library.
  19. '         3.  To demonstrate the color range of the EGA's
  20. '             higher-resolution mode.
  21. '| Mods:  Thomas G. Hanlin III
  22. '|        My modifications were largely a matter of
  23. '|        reformatting the source to appear more like
  24. '|        the other GRAFWIZ sources, for consistency.
  25. '|        A few other trivial alterations were made.
  26. ' =======================================================
  27.  
  28. DECLARE FUNCTION PDQRand% (Range%)     ' PDQ replacement for RND
  29. DECLARE SUB PDQRandomize (Seed%)       ' PDQ replacement for RANDOMIZE
  30.  
  31.    REM $INCLUDE: 'GRAFWIZ.BI'
  32.    '              ^----------- Tom Hanlin's Graphics Wizard library
  33.  
  34.    DEFINT A-Z                          ' does not need floating point math
  35.  
  36.    GetDisplay Adapter, Mono            ' check adapter type
  37.    IF Adapter < 4 THEN                 ' just end if less than EGA
  38.       PRINT "Sorry, you need an EGA or VGA for this demo!"
  39.       END
  40.    END IF
  41.  
  42.    DEF SEG = 0
  43.    z = PEEK(&H41C) + PEEK(&H41D) * 256
  44.    PDQRandomize z                      ' RANDOMIZE based on system timer
  45.  
  46.    G9Mode 2                            ' SCREEN 9 replacement
  47.  
  48.    ' Draw a large multi-colored box using
  49.    ' Tom's replacement for the LINE statement
  50.    FOR Y = 1 TO 63
  51.       G9Color Y AND 15, 0              ' implementation of COLOR
  52.       G9Box Y, Y, 639 - Y, 349 - Y, (Y = 100)
  53.    NEXT
  54.  
  55.    ' Next, draw the text in the center
  56.    ' of the box.  This is the intro screen
  57.    ' and isn't really needed for the demo,
  58.    ' though it does demonstrate quick graphics
  59.    ' text printing and the G#Banner extra!
  60.    G9Color 19, 15
  61.    G9Banner "S&B4EGA", 70, 70, 9, 10   ' GRAFWIZ "extra" (nice!)
  62.    G9Color 5, 0
  63.    G9Locate 12, 11
  64.    G9WriteLn "An EGA-only demo using Tom Hanlin's Graphics Wizard Library"
  65.    G9Locate 13, 11
  66.    G9WriteLn "and Crescent Software's PDQ Library.  Written by Mike Welch."
  67.    G9Color 14, 0
  68.    G9Locate 14, 11
  69.    G9WriteLn "Proudly compiled with Microsoft's QuickBASIC compiler v4.50"
  70.    G9Color 2, 0
  71.    G9Banner "Any Key Continues", 115, 235, 3, 6
  72.  
  73.    DO: LOOP UNTIL LEN(INKEY$)          ' loop until keypress
  74.  
  75.  
  76.    ' The following is the main part of the demo.
  77.    ' In the first loop (where i = 1) we just draw colorful
  78.    ' high-resolution EGA lines in a random order.  PDQ's
  79.    ' more versatile implementation of RANDOMIZE and RND
  80.    ' are used to generate the coordinates and colors of
  81.    ' the lines.  In the second part, we add a sort of
  82.    ' animation feature to the line drawing by erasing
  83.    ' (overwriting a line in black) the third line, or
  84.    ' "tail" if you will.  In the last loop (i = 3), we
  85.    ' just draw a series of fast high-resolution boxes.
  86.    FOR i = 1 TO 3                      ' really, three different demos
  87.       G9Cls                            ' GRAFWIZ CLS replacement
  88.       G9Locate 25, 32
  89.       G9Write "Any key continues"
  90.       DO                               ' loop until keypress
  91.          z = z + 1                     ' count times looped
  92.          IF z > 1024 THEN              ' if looped 1024 times
  93.             G9Cls                      ' clear the cluttered screen
  94.             G9Locate 25, 32
  95.             G9Write "Any key continues"
  96.             z = 0                      ' reset counter
  97.          END IF
  98.          X2 = PDQRand(639)             ' get random X coordinate
  99.          Y2 = PDQRand(335)             ' get random Y coordinate
  100.          c = PDQRand(15)               ' get random color value
  101.          G9Color c, 0                  ' set color
  102.          IF i = 1 THEN                 ' if this is part 1 of demo
  103.             G9Line X1, Y1, X2, Y2      ' draw a line
  104.          ELSEIF i = 2 THEN             ' if part 2 of demo (animation)
  105.             G9Line X1, Y1, X2, Y2      ' draw a line
  106.             G9Color 0, 0               ' set color to black on black
  107.             G9Line Xo, Yo, X1, Y1      ' erase the tail ("animation")
  108.             G9Color 2, 0               '
  109.             Xo = X1                    ' save old X and Y coordinates
  110.             Yo = Y1                    ' for future "erasure"
  111.          ELSE                          ' part 3 of demo
  112.             G9Box X1, Y1, X2, Y2, 0    ' draw multiple boxes
  113.          END IF
  114.          X1 = X2                       ' save last coordinates such that
  115.          Y1 = Y2                       ' the lines are connected
  116.       LOOP UNTIL LEN(INKEY$)           ' and loop
  117.       z = 0                            ' reset loop counter here
  118.    NEXT
  119.  
  120.    ' Thanks to my friend Earl Montgomery
  121.    ' who gave me the idea for this next
  122.    ' demo.  The addition of this portion
  123.    ' marks v1.10 of S&B4EGA.
  124.    Switch = -1                         ' initialize function switch
  125.    FOR k = 2 TO 4 STEP 2               ' loop twice, increment in DO below
  126.       Yo = 0: Xo = 0                   ' initialize all vars used in loop
  127.       X1 = 0: Y1 = 0
  128.       i = 0
  129.       Switch = Switch + 1              ' incriment function switch
  130.       G9Cls                            ' clear screen
  131.       G9Locate 25, 32
  132.       G9Write "Any key continues"
  133.       DO UNTIL LEN(INKEY$)             ' loop (twice) until keypress
  134.          EndLoop = 0                   ' reset Boolean flag
  135.          DO                            ' derive legal value for animation
  136.             X1 = X1 + Xo               ' add to x-coord
  137.             Y1 = Y1 + Yo               ' add to y-coord
  138.             z = PDQRand(1)             ' used for animation: binary result
  139.             IF X1 < 16 THEN            ' if under x range
  140.                Xo = z * k              ' enlarge value
  141.             ELSEIF X1 > 624 THEN       ' if over x range
  142.                Xo = 0 - z * k - 1      ' decrease value
  143.             ELSEIF Y1 < 16 THEN        ' if under y range
  144.                Yo = z * k              ' enlarge
  145.             ELSEIF Y1 > 315 THEN       ' if over y range
  146.                Yo = 0 - z * k - 1      ' decrease
  147.             ELSE
  148.                EndLoop = -1            ' quit computing and draw box
  149.             END IF
  150.          LOOP UNTIL EndLoop
  151.  
  152.          c = c + 1                     ' increase color counter
  153.          IF c > 63 THEN c = 1          ' reset if out of range
  154.  
  155.  
  156.          i = i + 1                     ' increment loop counter
  157.          G9Color c, 0                  ' set color here
  158.          IF Switch THEN                ' if on SECOND loop
  159.             IF i > 3072 THEN           ' clear screen
  160.                G9Cls
  161.                G9Locate 25, 32
  162.                G9Write "Any key continues"
  163.                i = 0
  164.             END IF
  165.             G9Box X1 - 15, Y1 + 15, X1 + 15, Y1 - 15, c  ' draw filled box
  166.          ELSE
  167.             G9Box X1 - 15, Y1 + 15, X1 + 15, Y1 - 15, 0  ' draw empty box
  168.             IF i > 6144 THEN           ' clear screen
  169.                G9Cls
  170.                G9Locate 25, 32
  171.                G9Write "Any key continues"
  172.                i = 0
  173.             END IF
  174.          END IF
  175.       LOOP
  176.    NEXT
  177.  
  178.    G9Mode 0                            ' restore text mode
  179.    PRINT ""                        ' clears to ANSI screen colors
  180.    '      ^---can't print this on printer
  181.